﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using System.Web.Security;

namespace TsCore
{
    public class SimpleFixture:Fixture
    {

        public SimpleFixture()
            :base()
        {
            this.Name = "Fixture todos contra todos";
            this.Description = "Algoritmo de todos contra todos con partidos de ida y vuelta";
        }

        /***Algoritmo de todos contra todos con partidos de ida y vuelta.***/
        //PRE: La cantidad de equipos debe ser mayor o igual a 2 y la fecha de inicio tiene que ser a futuro (minimo un dia)
        public override List<Match> GenerateMatches(DateTime fromDate, List<Team> teamList)
        {
            List<Match> generatedMatches = new List<Match>();
            try
            {
                DateTime matchDate = fromDate;
                if (fromDate.Date <= (DateTime.Now.Date))
                {
                    throw new Exception("El inicio de los Encuentros debe ser mayor a la fecha actual"); 
                }
                if (teamList.Count >= 2)
                {
                    foreach (Team localTeam in teamList)
                    {
                        foreach (Team visitorTeam in teamList)
                        {
                            //validamos que los equipos no sean los mismos y que ninguno sea un dummy team
                            if (localTeam != visitorTeam && (localTeam.IsDummyTeam == false && visitorTeam.IsDummyTeam == false))
                            {
                                generatedMatches.Add(new Match(matchDate, localTeam, visitorTeam));
                                matchDate = matchDate.AddDays(1);
                            }
                        }
                    }
                }
                else
                {
                    throw new Exception("La cantidad de equipos debe ser mayor a 2");
                }
            }
            catch (Exception e)
            {
                LogManager.GetLogger(Membership.GetUser().UserName).Error("Error al generar los Encuentros en el SimpleFixture", e);
            }
            return generatedMatches;
        }
    }
}
